'''
一个基础的threading示例
（也是一个基于function的示例）
简单场景推荐function方式，逻辑较为复杂的推荐class方式。
'''
import threading
import time

def sing(*args):
    print("===>> sing", args, type(args))
    time.sleep(2)  # 模拟阻塞
    print("===>> sing completed!")

def dance(*args):
    print("===>> dance", args, type(args))
    time.sleep(2) 
    print("===>> sing completed!")


if __name__ == "__main__":
    # 主线程、主进程一般写在此处
    # 1、创建子线程 | 注意：此时系统中还未出现子线程
    thread_1 = threading.Thread(target=sing, args=(1,2,3))
    thread_2 = threading.Thread(target=dance, args=('a', 'b', 'c', 'd'))
    # 2、运行子线程 | 注意：系统中出现相应子线程，并运行它
    thread_1.start()
    thread_2.start()
    # 查看线程数量 | 引申：可以查看系统中子线程究竟是什么时候出现和运行的
    print('====>>> threading nums: ', threading.enumerate())
    # print()是主线程的函数，子线程阻塞时，不会让主线程阻塞
    print('====>>> all threarding completed!')

    # 等待所有的子线程结束后，主线程结束。
